from dataclasses import dataclass, field
from typing import List, Dict

@dataclass
class Student:
    fullName: str
    school: str
    age: int
    borrowed_books: List[str] = field(default_factory=list)
    reserved_books: List[str] = field(default_factory=list)  # List of reserved book IDs
    credits: int = 3

@dataclass
class Book:
    title: str
    authors: List[str]
    publisher: str
    year: int
    category: str
    sub_category: str
    language: str
    page_count: int
    keywords: List[str]
    summary: str
    number_of_copies: int
    available_copies: int
    waiting_list: List[str] = field(default_factory=list)  # List of student IDs

@dataclass
class Library:
    catalog: Dict[str, Book] = field(default_factory=dict)
    student_records: Dict[str, Student] = field(default_factory=dict)